package com.ssy.lingxi.contract.service;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.contract.api.model.vo.request.PayApplyAmountVO;
import com.ssy.lingxi.contract.entity.ApplyAmountOrderDO;
import com.ssy.lingxi.contract.model.vo.applyamount.request.*;
import com.ssy.lingxi.contract.model.vo.applyamount.response.ApplyAmountOrderInfoVO;
import com.ssy.lingxi.contract.model.vo.applyamount.response.ApplyAmountOrderQueryVO;
import com.ssy.lingxi.contract.model.vo.applyamount.response.ApplyAmountOrderSummaryQueryVO;
import com.ssy.lingxi.contract.model.vo.applyamount.response.ApplyAmountOrderVO;
import com.ssy.lingxi.contract.model.vo.common.request.ContractOrderPageVO;
import com.ssy.lingxi.contract.model.vo.common.response.ContractOrderPageResponse;
import com.ssy.lingxi.contract.model.vo.common.response.PageItemVO;

import java.util.List;

/**
 * 请款单接口定义
 * @author 伍将
 * @date 2021/3/10
 * @version 2.0.0
 */
public interface IApplyAmountOrderService {

    /**
     * 分页查询请款单列表
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param pageVO: 分页请求参数
     * @return 操作结果
     **/
    Wrapper<PageData<ApplyAmountOrderQueryVO>> pageList(UserLoginCacheDTO user, ApplyAmountOrderPageVO pageVO);

    /**
     * 查询请款单详情
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param applyId: 请款单id
     * @return 操作结果
     **/
    Wrapper<ApplyAmountOrderVO> getDetail(UserLoginCacheDTO user, Long applyId);

    /**
     * 作废请款单
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param invalidVO: 作废请求参数
     * @return 操作结果
     **/
    Wrapper<Void> invalid(UserLoginCacheDTO user, ApplyAmountOrderInvalidVO invalidVO);

    /**
     * 分页查询待新增请款单列表
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param pageVO: 分页请求参数
     * @return 操作结果
     **/
    Wrapper<PageData<ApplyAmountOrderQueryVO>> pageToBeAdd(UserLoginCacheDTO user, ApplyAmountOrderCommonPageVO pageVO);

    /**
     * 保存请款单
     * @author 伍将
     * @date 2021/3/11
     * @param user: 当前登录用户
     * @param saveVO: 保存请求参数
     * @return 操作结果
     **/
    Wrapper<Long> save(UserLoginCacheDTO user, ApplyAmountOrderSaveVO saveVO);

    /**
     * 删除请款单
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param deleteVO: 删除请求参数
     * @return 操作结果
     **/
    Wrapper<Void> delete(UserLoginCacheDTO user, ApplyAmountOrderDeleteVO deleteVO);

    /**
     * 提交审核
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param submitVO: 提交请求参数
     * @return 操作结果
     **/
    Wrapper<Void> submitExamine(UserLoginCacheDTO user, ApplyAmountOrderSubmitVO submitVO);

    /**
     * 分页查询待审核请款单一级列表
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param pageVO: 分页请求参数
     * @return 操作结果
     **/
    Wrapper<PageData<ApplyAmountOrderQueryVO>> pageToBeExamineOne(UserLoginCacheDTO user, ApplyAmountOrderCommonPageVO pageVO);

    /**
     * 一级审核
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param examineVO: 申请请求参数
     * @return 操作结果
     **/
    Wrapper<Void> examineStepOne(UserLoginCacheDTO user, ApplyAmountOrderExamineVO examineVO);

    /**
     * 分页查询待审核请款单二级列表
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param pageVO: 分页请求参数
     * @return 操作结果
     **/
    Wrapper<PageData<ApplyAmountOrderQueryVO>> pageToBeExamineTwo(UserLoginCacheDTO user, ApplyAmountOrderCommonPageVO pageVO);

    /**
     * 二级审核
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param examineVO: 申请请求参数
     * @return 操作结果
     **/
    Wrapper<Void> examineStepTwo(UserLoginCacheDTO user, ApplyAmountOrderExamineVO examineVO);

    /**
     * 分页查询待提交请款单列表
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param pageVO: 分页请求参数
     * @return 操作结果
     **/
    Wrapper<PageData<ApplyAmountOrderQueryVO>> pageToBeSubmit(UserLoginCacheDTO user, ApplyAmountOrderCommonPageVO pageVO);

    /**
     * 提交
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param submitVO: 提交请求参数
     * @return 操作结果
     **/
    Wrapper<Void> submit(UserLoginCacheDTO user, ApplyAmountOrderSubmitVO submitVO);

    /**
     * 获取状态列表
     * @author 伍将
     * @date 2021/3/10
     * @return 操作结果
     **/
    @Deprecated
    Wrapper<List<PageItemVO>> getStatusList();

    /**
     * 分页查询请款统计
     * @author 伍将
     * @date 2021/3/10
     * @param user: 当前登录用户
     * @param pageVO: 分页请求参数
     * @return 操作结果
     **/
    Wrapper<PageData<ApplyAmountOrderSummaryQueryVO>> pageListForSummary(UserLoginCacheDTO user, ApplyAmountOrderSummaryPageVO pageVO);

    /**
     * 支付请款
     * @author 伍将
     * @date 2021/3/24
     * @param payVO: 支付请求参数
     * @return 操作结果
     **/
    Wrapper<Void> payApplyAmount(PayApplyAmountVO payVO);

    /**
     * 查询请款单信息
     * @param detailVO
     * @return
     */
    Wrapper<ApplyAmountOrderInfoVO> payDetailInfo(ApplyAmountOrderDetailVO detailVO);

    /**
     * 分页查询合同订单
     * @param sysUser
     * @param pageVO
     * @return
     */
    Wrapper<PageData<ContractOrderPageResponse>> contractOrderPageList(UserLoginCacheDTO sysUser, ContractOrderPageVO pageVO);

    /**
     * 根据合同id，查询已付款的请款单列表
     * @param contractId
     * @return
     */
    List<ApplyAmountOrderDO> getPaidApplyAmountOrderListByContractId(Long contractId);
}
